#include "zhi.h"
static const char 帮助[] =
	"————————————————————————————————————————————————\n"
    "知心编译器 "ZHI_VERSION" - 版权 (C) 2020-2021 郑钢\n"
	"————————————————————————————————————————————————\n"
    "用法: zhi [选项...] [-o 输出文件] [-c] 输入文件(s)...\n"
    "     zhi [选项...] -run 输入文件 [参数...]\n"
	"————————————————————————————————————————————————\n"
    "常用选项:\n"
    "  -c           仅编译 - 生成一个目标文件\n"
    "  -o 输出文件名   设置输出文件名\n"
    "  -run         运行编译源码\n"
    "  -fflag       set or reset (with 'no-' prefix) 'flag' (see zhi -hh)\n"
	"————————————————————————————————————————————————\n"
    "另请参见手册以获取更多详细信息.\n"
	"————————————————————————————————————————————————\n"
	"知心编译器-全中文开源编译器，为汉语编程爱好者提供更好更高效的编译器。\n"
	"码云：https://gitee.com/zhi-yu-yan/zhixin.git\n"
	"官网：www.zhixin.xin\n"
	"邮箱：121118882@qq.com\n"
	"————————————————————————————————————————————————\n"
    ;
//执行脚本文件
static void 运行文件(const char* 路径)
{
   const char* 最后斜杠 = strrchr(路径, '/');
   if (最后斜杠 != NULL)
   {
      char* 根 = (char*)malloc(最后斜杠 - 路径 + 2);
      memcpy(根, 路径, 最后斜杠 - 路径 + 1);
      根[最后斜杠 - 路径 + 1] = '\0';
      根目录 = 根;
   }

   虚拟机* 虚拟机S = 新建虚拟机();
   const char* 源码字符串 = 读取源代码文件(路径);
   Value vTmp;
   SET_VALUE_OBJ(&vTmp, 以字符串创建字符串对象(虚拟机S, 路径, strlen(路径)));
   执行模块(虚拟机S, vTmp, 源码字符串);
   释放虚拟机(虚拟机S);
}

//运行命令行
static void 运行命令行(void)
{
   虚拟机* 虚拟机S = 新建虚拟机();
   char sourceLine[MAX_LINE_LEN];
   puts(帮助);
   Value vName;
   while (true)
   {
      printf(">>> "); 
      //若读取失败或者键入quit就退出循环
      if (!fgets(sourceLine, MAX_LINE_LEN, stdin) || memcmp(sourceLine, "quit", 4) == 0)
      {
		break;
      }
	  SET_VALUE_OBJ(&vName, 以字符串创建字符串对象(虚拟机S, "cli", 3));
	  执行模块(虚拟机S, vName, sourceLine);

   }
   释放虚拟机(虚拟机S);
}

int 开始(int argc, const char** argv)
{
   if (argc == 1)
   {
      运行命令行();
   } else
   {
      运行文件(argv[1]);
   }
   return 0;
}
